﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using AdministracionCooperativa.entidades;
using System.Data;

namespace AdministracionCooperativa.Controlador
{
    public class ControladorChofer
    {
        private static catnom datosChofer;
        private static string nombreCompleto="";

        public static string NombreCompleto
        {
            get { return nombreCompleto; }
        }

        public static catnom DatosChofer
        {
            get { return datosChofer; }
        }
        public static catcho GetChoferById(string seguroSocial)
        {
            using (combisEntities bd = new combisEntities())
            {
                var resultado = bd.catcho.SingleOrDefault(c => c.SEGSOC == seguroSocial);
                EstableceDatosChofer(seguroSocial);             
                return resultado;
            }
        }

        public static void EstableceDatosChofer(string seguroSocial)
        {
            using (combisEntities bd = new combisEntities())
            {
                datosChofer = bd.catnom.SingleOrDefault(c => c.CVEELEC == seguroSocial);
                if (datosChofer!=null)
                    nombreCompleto = datosChofer.NOMBRE + " " + datosChofer.PATERNO + " " + datosChofer.MATERNO;
            }
        }
        public static List<KeyValuePair<string,string>> GetAllNombreAndSegSocChoferes()
        {
            using (combisEntities bd = new combisEntities())
            {
                var listaSegurosSociales = bd.catcho.Where(e => e.ACTIVO == true && e.TIPO == "C").Select(e => e.SEGSOC).ToList();
                return ObtenerSegSocNombreCompleto(listaSegurosSociales);
            }

        }
        public static List<KeyValuePair<string, string>> GetAllNombreAndSegSocPostureros()
        {
            using (combisEntities bd = new combisEntities())
            {
                var listaSegurosSociales = bd.catcho.Where(e => e.ACTIVO == true && e.TIPO == "P").Select(e => e.SEGSOC).ToList();
                return ObtenerSegSocNombreCompleto(listaSegurosSociales).OrderBy(c=>c.Value).ToList();
            }

        }
        private static List<KeyValuePair<string, string>> ObtenerSegSocNombreCompleto(List<string> segSociales)
        {
            using (combisEntities bd = new combisEntities())
            {
                var resultado = bd.catnom.Where((e) => (segSociales.Contains(e.CVEELEC))).ToList();
                var diccionario = new Dictionary<string, string>();
                foreach (var item in resultado)
                {
                    diccionario.Add(item.CVEELEC, item.NOMBRE + " " + item.PATERNO + " " + item.MATERNO);
                }
                return diccionario.ToList();
            }
        }
        public static List<KeyValuePair<string,string>> FiltrarChoferes(string nombre)
        {
            using (combisEntities bd = new combisEntities())
            {
                var listaSegurosSociales = bd.catcho.Select(e => e.SEGSOC).ToList();
                var listadoNombres = ObtenerSegSocNombreCompleto(listaSegurosSociales);
                var resultado = (from e in listadoNombres where e.Value.Contains(nombre) select e).ToList();
                return resultado;
            }
        }
        public static string Guardar(catnom nombre, catcho chofer)
        {
            if (GetChoferById(chofer.SEGSOC) == null)
                return CrearChofer(nombre, chofer);
            else
                return ModificarChofer(nombre, chofer);
        }
        private static string CrearChofer(catnom nombre, catcho chofer)
        {
            using (combisEntities bd = new combisEntities())
            {
                catcho ch = new catcho();
                catnom n = new catnom();
                ch.CATNOM_CVEELEC = nombre.CVEELEC;
                ch.ACTIVO = true;
                ch.FECVLI = chofer.FECVLI;
                ch.LICENCIA = chofer.LICENCIA;
                ch.SEGSOC = chofer.SEGSOC;
                ch.TIPO = chofer.TIPO;
                n.CVEELEC = nombre.CVEELEC;
                n.NOMBRE = nombre.NOMBRE;
                n.PATERNO = nombre.PATERNO;
                n.MATERNO = nombre.MATERNO;
                n.TELEFONO = nombre.TELEFONO;
                n.DIRECCION = nombre.DIRECCION;
                bd.catnom.AddObject(n);
                bd.catcho.AddObject(ch);
                bd.SaveChanges();
                return n.CVEELEC;
            }
        }
        private static string ModificarChofer(catnom nombre, catcho chofer)
        {
            using (combisEntities bd = new combisEntities())
            {
                catnom n = bd.catnom.SingleOrDefault(c => c.CVEELEC == nombre.CVEELEC);
                catcho ch = bd.catcho.SingleOrDefault(c => c.SEGSOC == chofer.SEGSOC);
                n.NOMBRE = nombre.NOMBRE;
                n.PATERNO = nombre.PATERNO;
                n.MATERNO = nombre.MATERNO;
                n.TELEFONO = nombre.TELEFONO;
                n.DIRECCION = nombre.DIRECCION;
                ch.CATNOM_CVEELEC = nombre.CVEELEC;
                ch.ACTIVO = chofer.ACTIVO;
                ch.FECVLI = chofer.FECVLI;
                ch.LICENCIA = chofer.LICENCIA;
                ch.TIPO = chofer.TIPO;
                bd.SaveChanges();
                return n.CVEELEC;
            }

        }
        public static string EliminarChoferById(string seguroSocial)
        {
            using (combisEntities bd = new combisEntities())
            {
                catnom n = bd.catnom.SingleOrDefault(c => c.CVEELEC == seguroSocial);
                catcho ch = bd.catcho.SingleOrDefault(c => c.SEGSOC == seguroSocial);
                bd.catnom.DeleteObject(n);
                bd.catcho.DeleteObject(ch);
                bd.SaveChanges();
                return n.CVEELEC;
            }
        }

    }
}
